# -*- coding:utf-8 -*-
# @Time:2023/5/30 13:21
# @Author: cevent
# @name=main
import urllib
from concurrent.futures import ThreadPoolExecutor
import os, subprocess

# m3u8 3.5.0
'''
m3u8是苹果公司推出的视频播放标准，是m3u的一种，只是编码格式采用的是UTF-8。

m3u8准确来说是一种索引文件，使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址，从而实现在线播放。
使用m3u8格式文件主要因为可以实现多码率视频的适配，视频网站可以根据用户的网络带宽情况，自动为客户端匹配一个合适的码率文件进行播放，从而保证视频的流畅度。

'''
import m3u8

# 这个index.m3u8很重要，直接右键“Open in new tab”就可以下载下来，但是该怎么处理呢？
# data = m3u8.load("index0.m3u8").data
# print("data: ", data)

order_ts = [
    'https://dh5.cntv.myhwcdn.cn/asp/h5e/hls/2000/0303000a/3/default/fbad61a66e2445099d1c632bf3ebc596/1.ts',
    'https://dh5.cntv.myhwcdn.cn/asp/h5e/hls/2000/0303000a/3/default/fbad61a66e2445099d1c632bf3ebc596/2.ts',
    'https://dh5.cntv.myhwcdn.cn/asp/h5e/hls/2000/0303000a/3/default/fbad61a66e2445099d1c632bf3ebc596/3.ts',
    'https://dh5.cntv.myhwcdn.cn/asp/h5e/hls/2000/0303000a/3/default/fbad61a66e2445099d1c632bf3ebc596/3.ts',
]


# 将所有的带https的url存入order_ts
# for i in data["segments"]:
#     order_ts.append(i["uri"])


# 返回一个dict，将文件名作为key，将url作为value
def read_name_url():
    name_url = {}
    for url in order_ts:
        name = url.split("/")[-1]
        name_url[name] = url
    return name_url


def download(url, name):
    # 下载ts文件到D:\ProgramData\study\mov\tsfiles文件夹
    urllib.request.urlretrieve(url, 'D://DEV_CODE//pyCharm_code//video_transfer//ts//' + name)


def download_tsfile():
    # 记录创立的线程
    task_list = []
    dict_name_url = read_name_url()
    # 线程池的创立
    pool = ThreadPoolExecutor(max_workers=50)
    for name in dict_name_url:
        # 启动多个线程下载文件，download是函数名，后面两个是参数值
        task_list.append(pool.submit(download, dict_name_url[name], name))
    # 判断所有下载线程是否全部结束
    while (True):
        if len(task_list) == 0:
            break
        for i in task_list:
            if i.done():
                task_list.remove(i)
                print("剩下任务数：{0}".format(len(task_list)))
    print("所有任务下载完成！")


# ffmpeg合并ts文件
''' 咱没有ffmpeg，就不用了，直接控制台输出合成ts

我们需要借助ffmpeg这个工具，这个工具非常强大，专门用来处理音频、视频切割、合并、编辑等，当然也非常复杂。
安装这个软件，可以点击后面参考文章中的第二篇文章，这里不细说。下面来说说怎么合并这些ts文件。
'''


def mixTss(name):
    # string前面加上‘r’,是为了告诉编译器这个string是个raw string，不要转义 backslash '\' 。
    com = r'D:\\ffmpeg\\bin\\ffmpeg.exe -f concat -safe 0 -i D:\\ProgramData\\study\\mov\\order.m3u8 -c copy D:\\ProgramData\\study\\mov\\{}.mp4'.format(
        name)
    os.system(com)


if __name__ == '__main__':
    # print('开始下载ts')
    # download_tsfile()

    print("开始合成")
    # 下面是执行cmd命令来合成mp4视频
    tsList = [
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\1.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\2.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\3.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\4.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\5.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\6.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\7.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\8.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\9.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\10.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\11.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\12.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\13.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\14.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\15.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\16.ts',
        'D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\17.ts'
    ]
    # command =''
    # for (index,item) in enumerate(tsList):
    #     ind=index+1
    #     print('index: ',index,'item: ',item,"ind: ",ind)
    #     if item.endswith('10.ts'):
    #         # command = r'copy/b %s' % item + ' D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\mp4\\0000%d' % ind + '.mp4'.format(1)
    #         command = r'copy/b %s' % item + ' D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\mp4\\0000%d' % ind + '.mp4'.format(1)
    #     else:
    #         command = r'copy/b %s' % item + ' D:\\DEV_CODE\\pyCharm_code\\video_transfer\\ts\\mp4\\00000%d'% ind+'.mp4'.format(1)
    #     output = subprocess.getoutput(command)
    #     print('A3演示文稿设计与制作作业3-演示文稿制作说明视频：沁园春雪制作说明.mp4  索引：',index,"文件：",item)

    command = r'copy/b D:\DEV_CODE\pyCharm_code\video_transfer\ts\*.ts D:\DEV_CODE\pyCharm_code\video_transfer\ts\mp4\000001.mp4'.format(1)
    output = subprocess.getoutput(command)
